<!doctype html><html lang=en dir=auto>
<head><meta charset=utf-8>
<meta http-equiv=x-ua-compatible content="IE=edge">
<meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no">
<meta name=robots content="index, follow">
<title>Blogs | wenbin</title>
<meta name=keywords content>
<meta name=description content="Blogs - wenbin">
<meta name=author content>
<link rel=canonical href=https://imwenbin.com/blog/>
<link crossorigin=anonymous href=/assets/css/stylesheet.min.css rel="preload stylesheet" as=style>
<link rel=icon href=https://imwenbin.com/favicon.ico>
<link rel=icon type=image/png sizes=16x16 href=https://imwenbin.com/favicon16x16.png>
<link rel=icon type=image/png sizes=32x32 href=https://imwenbin.com/favicon32x32.png>
<link rel=apple-touch-icon href=https://imwenbin.com/apple_touch_icon.png>
<link rel=mask-icon href=https://imwenbin.com/safari_pinned_tab.svg>
<meta name=theme-color content="#2e2e33">
<meta name=msapplication-TileColor content="#2e2e33">
<meta name=generator content="Hugo 0.89.3">
<link rel=alternate type=application/rss+xml href=https://imwenbin.com/blog/index.xml>
<noscript>
<style>#theme-toggle,.top-link{display:none}</style>
<style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--hljs-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style>
</noscript><meta property="og:title" content="Blogs">
<meta property="og:description" content>
<meta property="og:type" content="website">
<meta property="og:url" content="https://imwenbin.com/blog/"><meta property="og:site_name" content="wenbin">
<meta name=twitter:card content="summary">
<meta name=twitter:title content="Blogs">
<meta name=twitter:description content>
<script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Blogs","item":"https://imwenbin.com/blog/"}]}</script>
</head>
<body class=list id=top>
<script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add('dark'):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove('dark'):window.matchMedia('(prefers-color-scheme: dark)').matches&&document.body.classList.add('dark')</script>
<header class=header>
<nav class=nav>
<div class=logo>
<a href=https://imwenbin.com/ accesskey=h title="wenbin (Alt + H)">wenbin</a>
<span class=logo-switches>
<button id=theme-toggle accesskey=t title="(Alt + T)"><svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>
</button>
</span>
</div>
<ul id=menu>
<li>
<a href=https://imwenbin.com/blog/ title=Blog>
<span class=active>Blog</span>
</a>
</li>
<li>
<a href=https://imwenbin.com/archives title=Archive>
<span>Archive</span>
</a>
</li>
<li>
<a href=https://imwenbin.com/tags title=Tags>
<span>Tags</span>
</a>
</li>
</ul>
</nav>
</header>
<main class=main>
<header class=page-header><div class=breadcrumbs><a href=https://imwenbin.com/>Home</a></div>
<h1>Blogs</h1>
</header>
<article class=post-entry>
<header class=entry-header>
<h2>Xcode警告☞The iOS deployment target is set to 7.0, but the range of supported deployment target versio
</h2>
</header>
<section class=entry-content>
<p>拿AFNetworking举例：
如果出现 The iOS deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.1. (in target 'AFNetworking')
选中 Pods Project 在 target 中选警告提示的库 在 Build Settings 中搜索 iOS Deployment Target 并选择合适的版本 </p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:37:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to Xcode警告☞The iOS deployment target is set to 7.0, but the range of supported deployment target versio" href=https://imwenbin.com/blog/xcode%E8%AD%A6%E5%91%8Athe-ios-deployment-target-is-set-to-7.0-but-the-range-of-supported-deployment-target-versio/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>Xcode单元测试报错 Failed to load test bundle from file
</h2>
</header>
<section class=entry-content>
<p>在 test 的 target 选择 build Settings => iOS Deployment Target => 选择对应的版本 </p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:35:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to Xcode单元测试报错 Failed to load test bundle from file" href=https://imwenbin.com/blog/xcode%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%8A%A5%E9%94%99-failed-to-load-test-bundle-from-file/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>CocoaPods 私有库验证 --- 参数
</h2>
</header>
<section class=entry-content>
<p>pod lib lint 对spec文件做本地校验
pod spec lint 对spec文件做远程校验
--verbose 显示详细信息
--use-libraries 如果依赖了静态库使用这个可以校验通过
--allow-warnings 忽略警告
--sources 如果是私有库包含私有库的情况，在验证时加上这个属性：
--sources=https://xxxxx.git,https://github.com/CocoaPods/Specs.git 一个是从自己的私有仓库检索，一个是从Cocoapods的repo检索，按需添加，有多少个添加多少</p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:34:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to CocoaPods 私有库验证 --- 参数" href=https://imwenbin.com/blog/cocoapods-%E7%A7%81%E6%9C%89%E5%BA%93%E9%AA%8C%E8%AF%81-%E5%8F%82%E6%95%B0/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>pod install 和 rvm install ruby-xxxx报错解决办法
</h2>
</header>
<section class=entry-content>
<p>pod install 报错 configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details rvm install ruby-xxxx 报错 Error running './configure --prefix=/Users/zhaowenbin/.rvm/rubies/ruby-2.5.1 --with-opt-dir=/usr/local/opt/libyaml:/usr/local/opt/readline:/usr/local/opt/libksba:/usr/local/opt/openssl@1.1 --disable-install-doc --enable-shared', please read /Users/zhaowenbin/.rvm/log/1534992298_ruby-2.5.1/configure.log There has been an error while running configure. Halting the installation. 解决办法 命令行执行
xcode-select --install 接着执行安装
等待数分钟后点击完成
然后继续执行 rvm install ruby-xxx 或 pod install
原因可能是ruby的自动检测和Xcode的clang编译器冲突
完。</p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:33:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to pod install 和 rvm install ruby-xxxx报错解决办法" href=https://imwenbin.com/blog/pod-install-%E5%92%8C-rvm-install-ruby-xxxx%E6%8A%A5%E9%94%99%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>CocoaPods 命令的详细介绍
</h2>
</header>
<section class=entry-content>
<p>本文按照官网的叙述用大白话“翻译”出来，加上个人的经验和见解，可以更方便理解
参考链接CocoaPods官网之命令的详细介绍
前言 很多同学们分不清 pod install 和 pod update 命令的区别和用法，认为 pod install 只有第一次安装时和报错提示时使用，其实不是这样的。第三方库的版本有时候决定了我们开发的进度和心情，管理好这些版本可以使开发者更方便的使用。
先从Podfile文件讲起。
Podfile 文件 新建的Podfile文件，添加了 inhibit_all_warnings!，作用是忽略第三方库的警告。
# platform :ios, '9.0' 把 # 删了，作用是指定平台和版本，否则 pod install 后会出现警告，但是貌似没什么副作用。
# use_frameworks!，一般混编或是用 Swift 导入时需要打开，其它情况不用处理即可。
接下来是个容易被忽略的点
pod 'FMDB', '2.0' pod 'FMDB', '~> 2.0'
区别就是： pod 'FMDB', '2.0' 只会导入2.0版本的 pod 'FMDB', '~> 2.0' 会导入2.0大版本的最新版，比如最新版是2.9，那这样写就会导入2.9版本，但是不会超过3.0版本。
pod install 第一次都会使用该命令，会把每个安装的库的版本写入 Podfile.lock 文件中，不管有没有指定库的版本，都会把当前安装的版本写入。
在后面添加或删除库时使用该命令不会影响到其余库的版本，因为 Podfile.lock 已经锁定了，不会去检查更新每个库的版本。
pod outdated 会列出当前所有库的最新版本
pod update 如果采用 pod 'FMDB', '~> 2.0' 导入并执行 pod update 则会检查更新到最新版本，例如2....</p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:32:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to CocoaPods 命令的详细介绍" href=https://imwenbin.com/blog/cocoapods-%E5%91%BD%E4%BB%A4%E7%9A%84%E8%AF%A6%E7%BB%86%E4%BB%8B%E7%BB%8D/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>Xcode单元测试引入pod文件报错找不到
</h2>
</header>
<section class=entry-content>
<p>Project => Info => Configurations 将对应的 None 改一下 </p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:32:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to Xcode单元测试引入pod文件报错找不到" href=https://imwenbin.com/blog/xcode%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%BC%95%E5%85%A5pod%E6%96%87%E4%BB%B6%E6%8A%A5%E9%94%99%E6%89%BE%E4%B8%8D%E5%88%B0/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>制作Sqlcipher+SM4加密的framework包（OC）
</h2>
</header>
<section class=entry-content>
<p>项目中集成OpenSSL有时让人头疼，并且网上没有找到使用SM4加密数据库的案例，本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework，本文编译部分按需求编译模拟器或真机版本
第一步 下载所需文件 GMSSL：支持国密SM2/SM3/SM4算法的OpenSSL分支，由北京大学密码研究小组维护。 GMSSL for Github
下载后的压缩包解压，使用终端cd到文件夹
输入命令 参考GMSSL编译iPhone OS目标文件
export CC=clang export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer export CROSS_SDK=iPhoneOS.sdk export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH" ./Configure ios64-cross no-shared --prefix=/usr/local/openssl-ios64 make 解压完后文件夹里会多两个.a文件，后面用到的有图示3个文件 第二步 新建一个项目选framework pod init
pod 'FMDB/SQLCipher' pod 'OpenSSL-Universal', '~> 1.0.2.13' 也可以使用 pod 'OpenSSL' 但是可能会报错…
至此，项目中有加密框架SQLCipher和不支持SM4的低版本OpenSSL
第三步 替换OpenSSL框架内的文件
将GMSSL编译后的如上图所示的3个文件依次替换项目中的文件
将 lib-ios 文件夹中的两个.a文件替换 将 include-ios 文件夹中的 openssl文件夹替换，替换成上图GMSSL编译后 include 文件夹中的 openssl 文件夹 Command+B 编译
可能会报错，因为openssl不支持bitcode，所以关闭项目中的bitcode检测 再次 Command+B 编译 应该顺利通过
至此，项目中所需的所有文件都有了，还需要改动一小下
第四步 打开项目中 sqlite3.c 文件 搜索 aes-256-cbc 替换成 sm4-cbc，有两处 整个项目搜索 SQLCIPHER_CRYPTO_CC 把除了 sqlite3....</p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:27:03 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to 制作Sqlcipher+SM4加密的framework包（OC）" href=https://imwenbin.com/blog/%E5%88%B6%E4%BD%9Csqlcipher+sm4%E5%8A%A0%E5%AF%86%E7%9A%84framework%E5%8C%85oc/></a>
</article>
<article class=post-entry>
<header class=entry-header>
<h2>bandwagon封后操作
</h2>
</header>
<section class=entry-content>
<p>检查是否被封 方法一 打开 http://tool.chinaz.com/port/ 输入ip地址和端口号 点击扫描 如果显示“开启”则没有被封，否则往下看 打开 https://www.yougetsignal.com/tools/open-ports/ 输入ip地址和端口号 如果是open，证明ip被封了，接着往下看。如果是closed说明是vps没有开机或是其它原因。 方法二可能地址打不开，如果方法一测试过，基本上结论就有了。
方法二 打开 https://kiwivm.64clouds.com/main-exec.php?mode=blacklistcheck 点击 “Test Main IP” 进行测试 如果显示 IP BLOCKED，那就是ip被封了 如果显示 IP NOT BLOCKED，有可能是 端口号被封了，解决方法在下面?。 ip被封后怎么处理 方法一 搬瓦工提供每10周免费更换一次ip地址（不知道现在是否可用）
在上述方法二中检测如果被封了，点击 “Replace Main IP” 按步骤更换。更换需要提交工单，由人工更改，可能速度比较慢。后续结果可在邮件中查看。
方法二 付费更改ip。
如果因为特殊情况大面积封ip，建议不要付费更改，改完后还会被封，经验…
打开 https://bwh88.net/ipchange.php 登录然后提交工单。 提交后只是提交了工单，还没有付款。 付款 付款后可查看邮件，更改完后会发新的ip地址到收件箱里。 更改后操作 首先登录 KiwiVM 控制面板。 查看是否更改了ip，以及新的ip地址和ssh端口号。 如果知道root密码就进行下一步，如果不知道，就先关机，然后在KiwiVM 控制面板中更改root密码，然后开机。 Mac打开Terminal终端，使用ssh远程连接服务器。参考 https://www.bwgyhw.cn/bandwagonhost-ssh-login/ 连接上以后，重新创建端口号和密码。依次输入下面三个命令。 wget — no-check-certificate -O shadowsocks....</p>
</section>
<footer class=entry-footer><span title="2021-11-18 09:20:36 +0800 CST">⌚️ 2021-11-18</span></footer>
<a class=entry-link aria-label="post link to bandwagon封后操作" href=https://imwenbin.com/blog/bandwagon%E5%B0%81%E5%90%8E%E6%93%8D%E4%BD%9C/></a>
</article>
<footer class=page-footer>
<nav class=pagination>
<a class=prev href=https://imwenbin.com/blog/page/5/>« Prev Page</a>
</nav>
</footer>
</main>
<footer class=footer>
<span>&copy; 2021 <a href=https://imwenbin.com/>wenbin</a>.</span>
<span>
保留部分权利。
</span>
</footer>
<a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg>
</a>
<script>let menu=document.getElementById('menu');menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(a=>{a.addEventListener("click",function(b){b.preventDefault();var a=this.getAttribute("href").substr(1);window.matchMedia('(prefers-reduced-motion: reduce)').matches?document.querySelector(`[id='${decodeURIComponent(a)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(a)}']`).scrollIntoView({behavior:"smooth"}),a==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${a}`)})})</script>
<script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script>
<script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove('dark'),localStorage.setItem("pref-theme",'light')):(document.body.classList.add('dark'),localStorage.setItem("pref-theme",'dark'))})</script>
</body>
</html>